Skip to content

Introduce an initial set of DevEx features#7

Closed
adamwg wants to merge 28 commits into
crossplane:mainfrom
adamwg:awg/devex
Closed

Introduce an initial set of DevEx features#7
adamwg wants to merge 28 commits into
crossplane:mainfrom
adamwg:awg/devex

Conversation

@adamwg
Copy link
Copy Markdown
Member

@adamwg adamwg commented May 8, 2026

Description of your changes

This PR introduces the initial set of DevEx tools based around the concept of control plane Projects. Specifically, it introduces tools for:

  • Scaffolding a new, empty project.
  • Generating XRDs from example XRs or simpleschema documents.
  • Scaffolding compositions.
  • Scaffolding functions in go, go-templating, kcl, and python and adding them to composition pipelines.
  • Managing both runtime and build-time dependencies for a project, including generating language bindings (schemas) for added dependencies.
  • Building a project into a set of xpkgs.
  • Installing a project into a local control plane (created using kind) for testing.

Fixes crossplane/crossplane#6840

I have:

adamwg added 28 commits April 17, 2026 15:50
This commit adds build infrastructure for the standalone CLI repository, with a
stub cmd/crossplane. We'll add the existing crank code from crossplane in a
subsequent commit.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
This is all copied from crossplane/crossplane and updated to remove the parts we
don't need (e.g., pushing container images).

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
This commit contains the current `cmd/crank` from c/c and the supporting
`internal/docker` package, with imports updated as necessary.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
The CLI's version will not be guaranteed to match a Crossplane version going
forward, so we can't use the CLI's version number as the default image tag for
render. Use the `stable` tag instead, so that we always use the latest stable
Crossplane.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
We'll fill out more content in the README later, but bootstrap it for now.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
We don't actually have any fuzz tests yet, and this job relies on some
configuration existing in the google oss-fuzz repository.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Copy Crossplane's coderabbit config as a starting point and remove irrelevant
parts.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Historically, we've introduced new commands in the `crossplane alpha` or
`crossplane beta` trees and moved them as they matured. This makes it awkward to
introduce new commands in existing trees, since the tree gets split across
maturity levels, and also breaks users when commands mature since their
invocation changes.

Move all the existing alpha and beta commands to the top level (or into the
right tree, in the case of `crossplane render op`). Start indicating maturity
using kong tags. Alpha and beta features are hidden from help by default but can
be enabled by configuration and have a maturity indicator added to their help
automatically.

Make `crossplane render xr` the default subcommand for `crossplane render` so
that existing render users are not broken by this change.

Fixes crossplane/crossplane#7309

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Now that we have a config file, we need commands to manage it. Add basic
`crossplane config view` and `crossplane config set` commands so we can view and
update the config.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
This repository has additional maintainers beyond the
@crossplane/crossplane-maintainers group.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
The protos in this repository are vendored from crossplane/crossplane, so no
need to lint them or push them to the Buf schema registry. This avoids the need
for a `BUF_TOKEN` secret in this repo.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Add coderabbit config and clean up configuration
As proposed in the DevEx design doc, reorganize our command tree so that it's
noun-centric. Leave `crossplane render` as an alias for `crossplane xr render`
since that command is GA and we don't want to break any users/scripts. Allow
alpha and beta commands to move without aliases.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Show only the top-level nouns in the help. The user can use the `--help` flag on
any of these commands to see the subcommands. This will help keep our help tidy
and readable as we expand functionality.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
In keeping with how Crossplane handles pre-GA features, enable beta features by
default (and have a config option to disable them), but leave alpha features
disabled by default (with a config option to enable).

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Reorganize the command tree and introduce config
Export the entire nixpkgs-unstable rather than just its go package so that our
nix setup can use arbitrary packages from unstable as needed.

Matches the change in crossplane/crossplane commit 744190edf.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Upcoming developer experience changes require golang 1.26. Do the update
separately and resolve new lint issues so that we don't mix the changes into the
bigger DevEx PR.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
We use the function protobufs in the function we implement for injecting and
extracting context during render. When this code lived in crossplane/crossplane
it made sense to use the protobufs from there, but now that we're separate it
would be better to use the versions in function-sdk-go like a normal function.

This removes our dependency on crossplane/crossplane, which is nice.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Use function protobufs from function-sdk-go
The central concept in our developer experience is the Project. Introduce the
Project API in preparation for adding the tooling.

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
This commit introduces the initial set of DevEx tools based around the concept
of control plane Projects. Specifically, it introduces tools for:

- Scaffolding a new, empty project.
- Generating XRDs from example XRs or simpleschema documents.
- Scaffolding compositions.
- Scaffolding functions in go, go-templating, kcl, and python and adding them to
  composition pipelines.
- Managing both runtime and build-time dependencies for a project, including
  generating language bindings (schemas) for added dependencies.
- Building a project into a set of xpkgs.
- Installing a project into a local control plane (created using kind) for
  testing.

Fixes crossplane/crossplane#6840

Signed-off-by: Adam Wolfe Gordon <awg@upbound.io>
Comment thread internal/docker/docker.go
const maxFileSize = 1024 * 1024 * 1024

for {
header, err := tarReader.Next()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Proposal: Contribute the Upbound developer experience tooling to Crossplane

2 participants